import os

import celery

# Django项目中使用Celery需要先注册环境变量
from celery.schedules import crontab
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'vote2003.settings')

# 创建celery实例（对象）
app = celery.Celery(
    # 指定模块的名字（包的名字）
    main='vote2003',
    # 消息队列（中间人）
    broker='redis://:1Qaz2Wsx@47.104.31.138:5489/15',
    # 保存消息执行结果的数据库
    backend='django-db'
)
# 自动从指定的位置发现被@app.task装饰过的任务
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
# 通过Celery对象的conf属性的update消息配置定时任务
app.conf.update(
    timezone=settings.TIME_ZONE,
    enable_utc=True,
    # 定时任务（计划任务）相当于是消息的生产者
    # 如果只有生产者没有消费者那么消息就会在消息队列中积压
    # 将来实际部署项目的时候生产者、消费者、消息队列可能都是不同节点
    # 通过celery beat触发定时任务（消息的生产者）
    # celery -A 模块名 beat -l debug
    beat_schedule={
        'check_inactive_user': {
            'task': 'polls.tasks.check_inactive_user',
            'schedule': crontab(minute=30, hour=23),
        },
        'update_user_votecount': {
            'task': 'polls.tasks.update_user_votecount',
            'schedule': crontab(minute=0, hour=0),
        },
    },
)
